/*
 * Copyright 2022-2029 heshuixing(https://gitee.com/heshuixing)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.mercury.ec.module.air.service.api;

import com.mercury.ec.framework.air.core.client.dto.order.cancel.AirOrderCancelReqDTO;
import com.mercury.ec.framework.air.core.client.dto.order.cancel.AirOrderCancelRespDTO;
import com.mercury.ec.framework.air.core.client.dto.order.create.AirOrderCreateReqDTO;
import com.mercury.ec.framework.air.core.client.dto.order.create.AirOrderCreateRespDTO;
import com.mercury.ec.framework.air.core.client.dto.order.issue.AirOrderIssueReqDTO;
import com.mercury.ec.framework.air.core.client.dto.order.issue.AirOrderIssueRespDTO;
import com.mercury.ec.framework.air.core.client.dto.search.detr.AirDetrReqDTO;
import com.mercury.ec.framework.air.core.client.dto.search.detr.AirDetrRespDTO;
import com.mercury.ec.framework.air.core.client.dto.search.flight.AirSearchFlightReqDTO;
import com.mercury.ec.framework.air.core.client.dto.search.flight.AirSearchFlightRespDTO;
import com.mercury.ec.framework.air.core.client.dto.search.pat.AirPatReqDTO;
import com.mercury.ec.framework.air.core.client.dto.search.pat.AirPatRespDTO;
import com.mercury.ec.framework.air.core.client.dto.search.patex.AirPatexReqDTO;
import com.mercury.ec.framework.air.core.client.dto.search.patex.AirPatexRespDTO;
import com.mercury.ec.framework.air.core.client.dto.search.price.AirSearchPriceReqDTO;
import com.mercury.ec.framework.air.core.client.dto.search.price.AirSearchPriceRespDTO;
import com.mercury.ec.framework.air.core.client.dto.search.raw.AirRawReqDTO;
import com.mercury.ec.framework.air.core.client.dto.search.raw.AirRawRespDTO;
import com.mercury.ec.framework.air.core.client.dto.search.rt.AirRtReqDTO;
import com.mercury.ec.framework.air.core.client.dto.search.rt.AirRtRespDTO;
import com.mercury.ec.framework.air.core.client.dto.search.rtkt.AirRtktReqDTO;
import com.mercury.ec.framework.air.core.client.dto.search.rtkt.AirRtktRespDTO;
import com.mercury.ec.framework.air.core.client.dto.search.tgqrule.AirSearchTgqRuleReqDTO;
import com.mercury.ec.framework.air.core.client.dto.search.tgqrule.AirSearchTgqRuleRespDTO;
import com.mercury.ec.framework.air.core.client.dto.search.xsfsi.AirXsfsiReqDTO;
import com.mercury.ec.framework.air.core.client.dto.search.xsfsi.AirXsfsiRespDTO;
import com.mercury.ec.module.air.controller.admin.search.vo.tgqrule.AirSearchTgqRuleReqVO;
import com.mercury.ec.module.air.controller.admin.search.vo.tgqrule.AirSearchTgqRuleRespVO;
import com.mercury.ec.module.basic.dal.dataobject.tgqrule.TgqRuleDO;

import javax.validation.Valid;
import java.util.List;

/**
 * 机票接口服务
 *
 * @author hesx
 */
public interface AirApiService {

    /**
     * 航班查询
     *
     * @param reqDTO
     * @return
     */
    AirSearchFlightRespDTO getFlight(@Valid AirSearchFlightReqDTO reqDTO);

    /**
     * 运价查询
     *
     * @param reqDTO
     * @return
     */
    AirSearchPriceRespDTO getPrice(@Valid AirSearchPriceReqDTO reqDTO);

    /**
     * 退改签查询
     *
     * @param reqDTO
     * @return
     */
    AirSearchTgqRuleRespDTO getTgqRuleList(@Valid AirSearchTgqRuleReqDTO reqDTO);

    /**
     * RT 编码提取
     *
     * @param reqDTO RT请求参数
     * @return 编码信息
     */
    AirRtRespDTO rt(@Valid AirRtReqDTO reqDTO);

    /**
     * PAT 获取运价
     *
     * @param reqDTO PAT请求参数
     * @return 运价信息
     */
    List<AirPatRespDTO> pat(@Valid AirPatReqDTO reqDTO);

    /**
     * PATEX 获取运价
     *
     * @param reqDTO PATEX请求参数
     * @return 运价信息
     */
    List<AirPatexRespDTO> patex(@Valid AirPatexReqDTO reqDTO);

    /**
     * XSFSI 获取国际运价
     *
     * @param reqDTO XSFSI请求参数
     * @return
     */
    List<AirXsfsiRespDTO> xsfsi(@Valid AirXsfsiReqDTO reqDTO);

    /**
     * DETR 提取航班信息
     *
     * @param reqDTO DETR请求参数
     * @return 航班信息
     */
    AirDetrRespDTO detr(@Valid AirDetrReqDTO reqDTO);

    /**
     * RAW 原指令接口
     *
     * @param reqDTO
     * @return
     */
    AirRawRespDTO raw(@Valid AirRawReqDTO reqDTO);

    /**
     * RTKT 提取RTKT信息
     *
     * @param reqDTO
     * @return
     */
    AirRtktRespDTO rtkt(@Valid AirRtktReqDTO reqDTO);

    /**
     * 创建订单
     *
     * @param reqDTO
     * @return
     */
    AirOrderCreateRespDTO createOrder(AirOrderCreateReqDTO reqDTO);

    /**
     * 取消订单
     *
     * @param reqDTO
     * @return
     */
    AirOrderCancelRespDTO cancelOrder(AirOrderCancelReqDTO reqDTO);

    /**
     * 订单出票
     *
     * @param reqDTO
     * @return
     */
    AirOrderIssueRespDTO issueOrder(AirOrderIssueReqDTO reqDTO);
}
